package com.lancoo.znbkxx.teacher.aibkGenerateTestPaper.aibkReviewTestPaper.aibkQuesReviewTKT

import com.lancoo.znbkxx.teacher.aibkTestCoach.auidoPlayer.AudioPlayer
import com.lancoo.znbkxx.teacher.aibkTestCoach.aibkDialog.ShowDialogTools
import android.animation.ObjectAnimator
import android.content.Context
import android.os.Handler
import android.util.Log
import android.view.View
import android.webkit.JavascriptInterface
import android.webkit.ValueCallback
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.RelativeLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.lancoo.znbkxx.teacher.aibkTestCoach.kBase.KBaseFragment
import com.lancoo.znbkxx.teacher.aibkTestCoach.aibkTools.LancooMethod
import com.lancoo.znbkxx.teacher.R
import com.lancoo.znbkxx.teacher.aibkGenerateTestPaper.aibkReviewTestPaper.QuesReviewInforIndexHelp
import com.lancoo.znbkxx.teacher.aibkGenerateTestPaper.aibkReviewTestPaper.QuesReviewInforIndexHelp.getChildListBean
import com.lancoo.znbkxx.teacher.aibkTestCoach.aibkTools.adjustAudioSpeedHelp
import com.lancoo.znbkxx.teacher.aibkTestCoach.networkRequest.entity.TestPaperReviewInfor
import com.lancoo.znbkxx.teacher.aibkTestCoach.networkRequest.viewModel.MarkViewModel
import com.lancoo.znbkxx.teacher.aibkTestCoach.paperToPreview.aibkPlayerSpeed.PlayerSpeedChoiceAdapter
import com.lancoo.znbkxx.teacher.utils.DensityUtils
import com.lancoo.znbkxx.teacher.utils.WebStyleUtils
import com.lancoo.znbkxx.teacher.widget.KWebView
import kotlinx.android.synthetic.main.aibk_fragment_model_tkt.view.*
import kotlinx.android.synthetic.main.aibk_include_article_view.view.*
import kotlinx.android.synthetic.main.aibk_include_parent_audioplayer_a.view.*
import kotlinx.android.synthetic.main.aibk_include_ques_assessment.view.*
import kotlinx.android.synthetic.main.aibk_include_ques_web_tkt_ask_view.view.*
import kotlinx.android.synthetic.main.aibk_include_question_information_view.view.*
import org.koin.androidx.viewmodel.ext.android.viewModel
import java.text.SimpleDateFormat
import java.util.*

class QuesReviewFragmentTkt(
        val activity: AppCompatActivity,
        val testPaperReviewInfor: TestPaperReviewInfor,
        val index_A:Int,
        val index_B:Int
) : KBaseFragment(), View.OnClickListener {

    private var rootView: View? = null
    private val mViewModel: MarkViewModel by viewModel()
    private var isAddView = false
    private var childVpPosition = 0
    private var jumpSortIndex = ""
    private var scale = 0f
    private var current_Y = 0
    private var last_Y = 0

    override fun createLayout(): Int {
        return R.layout.aibk_fragment_model_tkt
    }

    override fun initView(view: View?) {
        scale = resources.displayMetrics.density
        rootView = view
        rootView!!.RlArticleView.visibility = View.GONE
        rootView!!.IvPlayOrPause.setOnClickListener(this)
        rootView!!.IBtnArticle.visibility = View.GONE

        //显示倍速选择功能
        rootView!!.RlPlayerSpeed.visibility = View.VISIBLE
        rootView!!.RvPlayerSpeed.visibility = View.GONE
        val lp: RelativeLayout.LayoutParams
                = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT)
        lp.setMargins(0, 0, DensityUtils.dp2px(activity,74f), 0)
        lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);//右对齐
        rootView!!.IvArrowUp.layoutParams = lp

        val audioSpeed = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].AudioSpeed
        //加载倍速选择下拉弹框
        var manager = LinearLayoutManager(activity)
        manager.orientation = LinearLayoutManager.VERTICAL
        rootView!!.RvPlayerSpeed.layoutManager = manager
        val mAdapter = PlayerSpeedChoiceAdapter(activity, audioSpeed,index_A,index_B)
        mAdapter.setClickListener(object : PlayerSpeedChoiceAdapter.OnClickListener{
            override fun onClick(playerSpeed:Double) {
                rootView!!.TvPlayerSpeed.text = playerSpeed.toString()+"x"
                rootView!!.RvPlayerSpeed.visibility = View.GONE
                val drawable = activity.resources.getDrawable(R.mipmap.aibk_icon_player_speed_open)
                drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
                rootView!!.TvPlayerSpeed.setCompoundDrawables(null, null, drawable, null)

                testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].AudioSpeed = playerSpeed
                //此处实现改变音频倍速
                val paperId = testPaperReviewInfor.PaperID
                val quesId = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].QuesID
                adjustAudioSpeedHelp.adjustAudioSpeed(activity,mViewModel,playerSpeed,paperId,quesId)
            }
        })
        rootView!!.RvPlayerSpeed.adapter = mAdapter
        rootView!!.TvPlayerSpeed.text = audioSpeed.toString()+"x"
        rootView!!.RlBtnPlayerSpeed.setOnClickListener{
            if(rootView!!.RvPlayerSpeed.visibility == View.VISIBLE){
                rootView!!.RvPlayerSpeed.visibility = View.GONE
                val drawable = activity.resources.getDrawable(R.mipmap.aibk_icon_player_speed_open)
                drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
                rootView!!.TvPlayerSpeed.setCompoundDrawables(null, null, drawable, null)
            }else{
                rootView!!.RvPlayerSpeed.visibility = View.VISIBLE
                val drawable = activity.resources.getDrawable(R.mipmap.aibk_icon_player_speed_close)
                drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
                rootView!!.TvPlayerSpeed.setCompoundDrawables(null, null, drawable, null)
            }
        }

        showQuestionView()
    }


    /*
    * 显示试题内容
    * */
    private fun showQuestionView() {

        //是否显示来源
        var resource = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].Resource
        if (resource.isEmpty()) {
            rootView!!.IncludeQuesInformationView.visibility = View.GONE
        } else {
            rootView!!.IncludeQuesInformationView.visibility = View.VISIBLE
            rootView!!.IncludeQuesInformationView.TvSourceFrom.text = "来源: $resource"
            //隐藏试题准确率
            rootView!!.IncludeQuesInformationView.TvScoreRate.visibility = View.GONE
        }

        //加载单题评估系数
        showEvaluationCoefficient()
        //是否需要加载听力音频
        val typeNo = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].TypeNo
        if(typeNo == "S"){//听力填空
            var timeLength = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].QuesAudio.TimeLength
            val format = SimpleDateFormat("mm:ss", Locale.CHINA)
            rootView!!.TvAudioTotalTime.text = format.format(timeLength*1000)
            rootView!!.RlAudioPlayer.visibility = View.VISIBLE
        }else{
            rootView!!.RlAudioPlayer.visibility = View.GONE
        }
        //加载题干内容
        var ask  =""
        var quesBody = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].QuesBody
        if(typeNo == "S") {//听力填空
            val childListSize = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
            for (c in 0 until childListSize) {
                val sortIndex = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ItemList[0].SortIndex
                val sortIndexType = getChildListBean(testPaperReviewInfor,index_A,index_B,c).SortIndexType
                val childAsk = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ChildAsk
                if (sortIndexType == 0) {
                    if (quesBody.isEmpty()) {
                        if (ask.isEmpty()) {
                            ask = "$sortIndex. $childAsk" + getHtmlAnalysisSingle(c)
                        } else {
                            ask = "$ask<br>$sortIndex. $childAsk" + getHtmlAnalysisSingle(c)
                        }
                    }else{
                        ask = "$quesBody<br>$sortIndex. $childAsk" + getHtmlAnalysisSingle(c)
                    }
                } else if (sortIndexType == 1) {
                    ask = ask +"<br>"+ childAsk + getHtmlAnalysisSingle(c)
                }
            }
        }else{
            val childListSize = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
            for (c in 0 until childListSize) {
                val sortIndex = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ItemList[0].SortIndex
                val sortIndexType = getChildListBean(testPaperReviewInfor,index_A,index_B,c).SortIndexType
                val childAsk = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ChildAsk
                if (sortIndexType == 0) {
                    if (quesBody.isEmpty()) {
                        if (ask.isEmpty()) {
                            ask = "$sortIndex. $childAsk"
                        } else {
                            ask = "$ask<br>$sortIndex. $childAsk"
                        }
                    }else{
                        ask = "$quesBody<br>$sortIndex. $childAsk"
                    }
                } else if (sortIndexType == 1) {
                    ask = ask +"<br>"+ childAsk
                }
            }
            ask += getHtmlAnalysisAll()
        }

        ask = ask.replace("clickFunction", "Android.clickFunction")

        if (WebStyleUtils.hasTable(ask)) {
            WebStyleUtils.showWebViewCssStyle(activity, rootView!!.WvAsk, ask, false)
        } else {
            WebStyleUtils.showWebViewCssStyle(activity, rootView!!.WvAsk, ask, true)
        }
        rootView!!.WvAsk.addJavascriptInterface(
                JSInterface(
                        activity,
                        WebStyleUtils.returnImageUrlsFromHtml(ask)
                ), "Android"
        )
        rootView!!.WvAsk.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView, url: String) {
                super.onPageFinished(view, url)
                rootView!!.RlWebLoading.visibility = View.GONE
                WebStyleUtils.setWebImageClick(view, "Android")

                isAddView = true
                handler.sendEmptyMessageDelayed(0, 100)
            }
        }


        rootView!!.WvAsk.setOnScrollChangeListener(object : KWebView.OnScrollChangeListener {
            override fun onPageEnd(l: Int, t: Int, oldl: Int, oldt: Int) {
                Log.e("KWvA", "已经到达地端")
            }

            override fun onPageTop(l: Int, t: Int, oldl: Int, oldt: Int) {
                Log.e("KWvA", "已经到达顶端")
            }

            override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
                Log.e("KWvA", "=======oldt========$oldt")
                last_Y = oldt
            }
        })

    }


    //JS点击事件处理
    inner class JSInterface(var context: Context, var imageUrls: Array<String>?) {

        @JavascriptInterface
        fun clickFunction(position: String) {
            activity.runOnUiThread {
                //在webview中进行点击选择需要作答的区间
                childVpPosition = QuesReviewInforIndexHelp.ItemSortIndex_return_ChildVpIndex(testPaperReviewInfor, position)
                handler.sendEmptyMessage(0)
            }
        }

        //java回调js代码，不要忘了@JavascriptInterface这个注解，不然点击事件不起作用
        @JavascriptInterface
        fun openImage(img: String, pos: Int) {
            val paths = ArrayList<String>()
            paths.add(img)
            Log.e("openImage", "$pos========点击了图片=========$img")
            ShowDialogTools.showBigImageDialog(activity,img)
        }
    }

    private fun showBlankView() {

        var kWvHeight = rootView!!.WvAsk.height//获取当前webview控件的高度
        rootView!!.WvAsk.evaluateJavascript(
                "javascript:topHeight('blank$jumpSortIndex')",
                ValueCallback<String?> { value ->
                    val dp = Integer.valueOf(value!!)
                    current_Y = (Math.round(dp * scale) - kWvHeight / 2).toInt()//此处关键，保持被点击的区域处于可见区域中间位置
                    val anim: ObjectAnimator =
                            ObjectAnimator.ofInt(
                                    rootView!!.WvAsk, "scrollY", last_Y, current_Y
                            )
                    anim.setDuration(500).start()
                    last_Y = current_Y
                })

        val childListSize = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
        for(c in 0 until childListSize){
            val itemListSize = getChildListBean(testPaperReviewInfor, index_A, index_B, c).ItemList.size
            for (b in 0 until itemListSize) {
                val itemSortIndex = getChildListBean(testPaperReviewInfor, index_A, index_B, c).ItemList[b].ItemSortIndex
                var itemAnswer = getChildListBean(testPaperReviewInfor, index_A, index_B, c).ItemList[b].ItemAnswer
                itemAnswer = LancooMethod.getNewItemAnswer(itemAnswer, true)
                if (itemSortIndex == jumpSortIndex) {
                    rootView!!.WvAsk.loadUrl("javascript:setBackGroundColor('" + "blank" + itemSortIndex +
                            "','" + "#ceebff" + "','" + "5px" + "','" + "0px solid #ffffff" + "')")
                } else {
                    rootView!!.WvAsk.loadUrl("javascript:setBackGroundColor('" + "blank" + itemSortIndex +
                            "','" + "#00000000" + "','" + "0px" + "','" + "1px solid #848484" + "')")
                }
                showBlankItemAnswer(itemSortIndex, itemAnswer)
            }
        }

    }

    private fun showBlankItemAnswer(
            itemSortIndex: String,
            itemAnswer: String?
    ) {
        rootView!!.WvAsk.loadUrl(
                "javascript:CalledByJavaCodeWithPara('" + "blank" + itemSortIndex
                        + "','" + "<font color=\"#00b30d\">"
                        + "&nbsp&nbsp&nbsp&nbsp&nbsp" + itemAnswer + "&nbsp&nbsp&nbsp&nbsp&nbsp" + "</font>')"
        )
    }

    //显示评估系数
    private fun showEvaluationCoefficient() {
        rootView!!.TvNanDu.text = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].HVAL
        rootView!!.TvQuFenDu.text = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].DVAL
        rootView!!.TvBaoGuangDu.text = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].EXVAL
    }

    //答题卡跳转
    fun fragmentJumpToSortIndex(itemSortIndex: String) {
        childVpPosition = QuesReviewInforIndexHelp.ItemSortIndex_return_ChildVpIndex(testPaperReviewInfor,itemSortIndex)
        if(isAddView) {
            handler.sendEmptyMessageDelayed(0, 100)
        }
    }

    //答题卡跳转辅助方法
    private val handler = Handler(Handler.Callback { msg ->
        when (msg.what) {
            0 -> {
                jumpSortIndex = QuesReviewInforIndexHelp.ChildVpIndex_return_ItemSortIndex(testPaperReviewInfor,index_A,index_B, childVpPosition)
                showBlankView()
            }
        }
        false
    })

    override fun setMenuVisibility(menuVisible: Boolean) {
        super.setMenuVisibility(menuVisible)
        pauseAudio()
    }

    private fun getHtmlAnalysisSingle(index_C:Int): String {
        var itemAnalysis = getChildListBean(testPaperReviewInfor,index_A,index_B,index_C).ChildAnalysis
        if (itemAnalysis.isEmpty()) {
            itemAnalysis = activity.getString(R.string.aibk_no_analyze) //...略
        }

        var screenWidth = DensityUtils.getScreenWidth(activity)
        screenWidth = DensityUtils.px2dp(activity,screenWidth.toFloat())
        val itemAnalysisAll = "<div>\n" +
                "    <p style=\"width:100;float: left;color:#00afff;\">【答案解析】</p>\n" +
                "    <div style=\"width: " + (screenWidth - 100) + ";float: left;word-wrap: break-word;\">\n" +
                "      <p>" + itemAnalysis + "</p>\n" +
                "    </div>\n" +
                "  </div>"

        return itemAnalysisAll
    }

    private fun getHtmlAnalysisAll(): String {

        var isHaveItemAnalysis = false
        var itemAnalysisAll = ""
        val childListSize = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
        for(c in 0 until childListSize){
            val sortIndxType = getChildListBean(testPaperReviewInfor,index_A,index_B,c).SortIndexType
            if(sortIndxType == 0) {
                var childAnalysis = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ChildAnalysis
                if (childAnalysis.isEmpty()) {
                    childAnalysis = activity.getString(R.string.aibk_no_analyze) //...略
                } else {
                    isHaveItemAnalysis = true
                }
                if (itemAnalysisAll.isEmpty()) {
                    itemAnalysisAll = childAnalysis
                } else {
                    itemAnalysisAll = "$itemAnalysisAll<br>$childAnalysis"
                }
            }else if(sortIndxType == 1){
                val itemListsize = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ItemList.size
                for (d in 0 until itemListsize) {
                    val sortIndex = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ItemList[d].SortIndex
                    var itemAnalysis = getChildListBean(testPaperReviewInfor,index_A,index_B,c).ItemList[d].ItemAnalysis
                    if (itemAnalysis.isEmpty()) {
                        itemAnalysis = activity.getString(R.string.aibk_no_analyze) //...略
                    } else {
                        isHaveItemAnalysis = true
                    }
                    if (itemAnalysisAll.isEmpty()) {
                        itemAnalysisAll = "<b>$sortIndex. </b>$itemAnalysis"
                    } else {
                        itemAnalysisAll = "$itemAnalysisAll<br><b>$sortIndex. </b>$itemAnalysis"
                    }
                }
            }
            if (!isHaveItemAnalysis) {
                itemAnalysisAll = activity.getString(R.string.aibk_no_analyze)
            }
        }

        var screenWidth = DensityUtils.getScreenWidth(activity)
        screenWidth = DensityUtils.px2dp(activity,screenWidth.toFloat())
        itemAnalysisAll = "<div>\n" +
                "    <p style=\"width:100;float: left;color:#00afff;\">【答案解析】</p>\n" +
                "    <div style=\"width: " + (screenWidth - 100) + ";float: left;word-wrap: break-word;\">\n" +
                "      <p>" + itemAnalysisAll + "</p>\n" +
                "    </div>\n" +
                "  </div>"

        return itemAnalysisAll
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.IvPlayOrPause -> {
                var quesAudioPath = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].QuesAudio.Path
                audioPlayer = AudioPlayer(
                        activity, rootView!!.IvPlayOrPause,
                        rootView!!.SeekBarProgress,
                        rootView!!.TvAudioCurrentTime,
                        rootView!!.TvAudioTotalTime,
                        quesAudioPath,
                        AudioPlayer.ParentAudioListener {
                            val audioSpeed = testPaperReviewInfor.TypeList[index_A].QuesDetailList[index_B].AudioSpeed
                            audioPlayer!!.setPlaySpeed(audioSpeed.toFloat())
                        })
            }
        }
    }

}